package docker


//dockerFile
func dockerFile(){
	dockerFile 是用来构建docker镜像的文件！命令参数脚本
	构建步骤
	1.构建dockerfile文件
	2.docekr build 构建成为一个镜像
	3.docker run 运行镜像
	4.docker push 发布镜像(dockerHub、阿里镜像仓库)

	dockerfile 构建过程
	基础知识
	1.每个保留关键字(指令)都是必须是大写字母
	2.执行从上到下执行
	3.#表示注释
	4.每一个指令都会创建提交一个新的镜像层，并提交

	dockerfile是面向开发的，我们以后要发布项目，就需要编写dockerfile文件，这个文件十分简单


	dockerfile 构建文件，定义了一切的步骤，源代码
	dockerImages：通过dockerfile构建生成的镜像，最终发布和运行
	docker容器：容器就是镜像运行起来提供服务


	dockerfile的指令
	FROM   			基础镜像，一切从这里开始构架，centos
	MAINTAINER		镜像是谁写的，姓名+邮箱
	RUN				镜像构建的时候需要运行的命令
	ADD				步骤：+nginx+mysql+redis等 添加内容
	WORKDIR			镜像的工作目录
	VOLUME			挂载的目录
	EXPOSE			指定暴露端口配置 -p
	CMD 			指定这个容器启动的时候要运行的命令  只有最有一个会生效，可被替代
	ENTRYPOINT		指定这个容器启动的时候要运行的命令 可以追加命令
	ONBUILD			当构建一个被继承dockerfile这个时候就会运行ONBUILD的指令触发指令
	COPY 			类型ADD，将我们文件拷贝到镜像中
	ENV             构建的时候设置环境变量


	1.编写自己的centos文件
	FROM centos

	MAINTAINER zydh<1138552759@qq.com>

	#环境变量 key value 形式
	ENV MYPATH /usr/local

	#工作目录 $ 取地址符
	WORKDIR	$MYPATH

	RUN yum -y install vim
	RUN yum -y install net-tools


	EXPOSE 80

	CMD echo $MYPATH
	CMD echo "--end--"
	CMD /bin/bash

	2.通过这个文件构建镜像 【注意后面有【点.】】
		dokcer bulid -f dockerfile文件路径 -t 镜像名:[版本号] .
		[root@VM_0_13_centos dockerfile]#  docker build -f dockerfile-centos-go-mysql-redis -t zydhcentos:1.0 .
		Successfully built 0bb85b6bdb73
		Successfully tagged zydhcentos:1.0

		3.测试运行
		docker images
		docker run -it zydhcentos:1.0


	/*---------查看镜像的历史--------*/
	docker history 镜像id


	/*---------CMD和ENTRYPOINT的区别--------*/
	CMD 			指定这个容器启动的时候要运行的命令  只有最有一个会生效，可被替代
	ENTRYPOINT		指定这个容器启动的时候要运行的命令 可以追加命令

	测试cmd
	FROM centos

	CMD ["ls","-a"]  #cmd 只会执行最后一行

	运行
	docker run -it 上边bulid后的容器id

	想追加一个命令
	docker run -it  上边bulid后的容器id -l [这里是追加到cmd的 ls -al],会报错
	[root@VM_0_13_centos dockerfile]# docker run -it 0c5a7aae0ef4 -l
	docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
	ERRO[0000] error waiting for container: context canceled
	[root@VM_0_13_centos dockerfile]#

	在cmd的情况下， -l 替换了CMD ["ls","-a"]命令，而-l并不是命令，所以报错
		docker run -it 0c5a7aae0ef4 ls -al  就可以

	ENTRYPOINT
		不会替换，会追加到dockerfile.ENTRYPOINT命令的后面
		[root@VM_0_13_centos dockerfile]# more dockerfile-entrypint-test
		FROM centos

		ENTRYPOINT ["ls","-a"]



		[root@VM_0_13_centos dockerfile]# ll
		[root@VM_0_13_centos dockerfile]# vim dockerfile-entrypint-test
		[root@VM_0_13_centos dockerfile]# docker build -f dockerfile-entrypint-test -t dockerfile-entrypoint-test:2.0 .
		[root@VM_0_13_centos dockerfile]# docker run -it 7ab51994119f -l
		...




}


//发布镜像到dockerhub上
func  releaseDockerHub()  {
	//发布到docker.hub
	//1.先到docker.hub注册账号
	//2.确定这个账号可以登录
	//3.在我们服务器上提交自己的镜像
	然后在服务器上
	docker login
			--help
		[root@VM_0_13_centos ~]# docker login --help

			Usage:  docker login [OPTIONS] [SERVER]

			Log in to a Docker registry.
			If no server is specified, the default is defined by the daemon.

			Options:
			-p, --password string   Password
			--password-stdin    Take the password from stdin
			-u, --username string   Username
		[root@VM_0_13_centos ~]#

	//登录
	docker login -uusername  然后回车
	Password   这里输入密码

		[root@VM_0_13_centos ~]# docker login -uzydh
		Password:
		WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
		Configure a credential helper to remove this warning. See
		https://docs.docker.com/engine/reference/commandline/login/#credentials-store

		Login Succeeded
		[root@VM_0_13_centos ~]#

	//提交镜像
	docker push 作者名/镜像名[版本号]
	docker push zydh/zydhcentos:1.0
	The push refers to repository [docker.io/zydh/hello-world]
	An image does not exist locally with the tag: zydh/hello-world
	失败，解决
	用docekr tag 改名


	docker tag
	docker tag 镜像id zydh/hello-world:1.0


	docker push zydh/hello-world:1.0


	[root@VM_0_13_centos ~]# docker tag bf756fb1ae65 zydh/hello-world:1.0
	[root@VM_0_13_centos ~]# docker push zydh/hello-world:1.0
	The push refers to repository [docker.io/zydh/hello-world]
	9c27e219663c: Mounted from library/hello-world
	1.0: digest: sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 size: 525
	[root@VM_0_13_centos ~]# docker images
	REPOSITORY                   TAG       IMAGE ID       CREATED         SIZE
	dockerfile-entrypoint-test   2.0       7ab51994119f   16 hours ago    209MB
	dockerfile-cmd-test          1.0       0c5a7aae0ef4   16 hours ago    209MB
	zydhcentos                   1.0       0bb85b6bdb73   16 hours ago    291MB
	mysql                        latest    c8562eaf9d81   5 weeks ago     546MB
	golang                       latest    5f46b413e8f5   6 weeks ago     839MB
	nginx                        latest    f6d0b4767a6c   6 weeks ago     133MB
	centos                       latest    300e315adb2f   2 months ago    209MB
	hello-world                  latest    bf756fb1ae65   13 months ago   13.3kB
	zydh/hello-world             1.0       bf756fb1ae65   13 months ago   13.3kB
	[root@VM_0_13_centos ~]#

	//退出 dockerhub
	docker logout




}




//发布镜像到阿里云
func releaseAliDockerHub(){
	//登录阿里云
	//找到【容器镜像服务】-镜像仓库
	//3.右上角[创建命名空间]，这个命名空间一般是指非常大的项目，然后这个项目里面有很多很多镜像
	//创建命名空间
	//创建容器镜像

	具体步骤看doc文档和参考官方文档
	[root@VM_0_13_centos ~]# docker login --username=朝游东海 registry.cn-hangzhou.aliyuncs.com
	Password:
	WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
	Configure a credential helper to remove this warning. See
	https://docs.docker.com/engine/reference/commandline/login/#credentials-store

	Login Succeeded
	[root@VM_0_13_centos ~]#

	2. 从Registry中拉取镜像
	$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/zydh-docker/zydh-docker:[镜像版本号]


	3. 将镜像推送到Registry
	$ sudo docker login --username=朝游东海 registry.cn-hangzhou.aliyuncs.com
	$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/zydh-docker/zydh-docker:[镜像版本号]
	$ sudo docker push registry.cn-hangzhou.aliyuncs.com/zydh-docker/zydh-docker:[镜像版本号]



}